package com.btcode.netty.server.handler.decode;

import io.netty.handler.codec.LengthFieldBasedFrameDecoder;

import java.nio.ByteOrder;

public class SimpleLengthFrameDecoder extends LengthFieldBasedFrameDecoder {

    /*
    ByteOrder：小端数据还是大端，failFast：超过最大解码长度时,是否抛出异常
    （1）maxFrameLength：发送的数据包的最大长度。示例程序中该值为1024，表示一个数据包最多可发送1024个字节。
    （2）lengthFieldOffset：长度字段偏移量。指的是长度字段位于整个数据包内部的字节数组中的下标值。
    （3）lengthFieldLength：长度字段所占的字节数。如果长度字段是一个int整数，则为4，如果长度字段是一个short整数，则为2。
    （4）lengthAdjustment：长度的矫正值。这个参数最为难懂。在传输协议比较复杂的情况下，例如包含了长度字段、协议版本号、魔数等等。那么，解码时，就需要进行长度矫正。
        长度矫正值的计算公式为：内容字段偏移量 - 长度字段偏移量 - 长度字段的字节数。就是上面的版本字段[2字节]，即版本号的长度。
    （5）initialBytesToStrip：丢弃的起始字节数。在有效数据字段Content前面，还有一些其他字段的字节，作为最终的解析结果，可以丢弃。例如，上面的示例程序中，前面有4个节点的长度字段，
        它起辅助的作用，最终的结果中不需要这个长度，所以丢弃的字节数为4。
     */
    public SimpleLengthFrameDecoder(ByteOrder byteOrder, int maxFrameLength, int lengthFieldOffset, int lengthFieldLength, int lengthAdjustment, int initialBytesToStrip, boolean failFast) {
        super(byteOrder, maxFrameLength, lengthFieldOffset, lengthFieldLength, lengthAdjustment, initialBytesToStrip, failFast);
    }

    public SimpleLengthFrameDecoder(ByteOrder byteOrder, int maxFrameLength, int lengthFieldOffset, int lengthFieldLength, int lengthAdjustment, int initialBytesToStrip) {
        super(maxFrameLength, lengthFieldOffset, lengthFieldLength, lengthAdjustment, initialBytesToStrip);
    }
}
